home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / SourceCode / AdobeExamples / NX_Clock / ClockView.h < prev    next >
Text File  |  1992-12-19  |  4KB  |  166 lines

  1.  
  2. /*
  3.  * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
  4.  *
  5.  * (b)  If this Sample Code is distributed as part of the Display PostScript
  6.  *    System Software Development Kit from Adobe Systems Incorporated,
  7.  *    then this copy is designated as Development Software and its use is
  8.  *    subject to the terms of the License Agreement attached to such Kit.
  9.  *
  10.  * (c)  If this Sample Code is distributed independently, then the following
  11.  *    terms apply:
  12.  *
  13.  * (d)  This file may be freely copied and redistributed as long as:
  14.  *    1) Parts (a), (d), (e) and (f) continue to be included in the file,
  15.  *    2) If the file has been modified in any way, a notice of such
  16.  *      modification is conspicuously indicated.
  17.  *
  18.  * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
  19.  *    Adobe Systems Incorporated.
  20.  * 
  21.  * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
  22.  *    CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
  23.  *    AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
  24.  *    ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
  25.  *    OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
  26.  *    WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
  27.  *    WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
  28.  *    DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
  29.  *    FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
  30.  *    OF THIRD PARTY RIGHTS.
  31.  */
  32.  
  33. /*
  34. *    ClockView.h
  35. *
  36. *    This class handles the drawing of the clock and the moving of the alarm.
  37. *    The clock face is drawn into a bitmap and then composited into the buffered
  38. *    window before drawing the hands. The hands are stored in the server
  39. *    as user paths. Each hand also has a graphic state associated with it. Before
  40. *    hand is drawn, its graphic state is installed and then rotated to its current
  41. *    angle and then the user path is rendered.
  42. *
  43. *    Most of the literals below are for drawing the clock face and the hands.
  44.  *
  45.  *    Version:    2.0
  46.  *    Author:    Ken Fromm
  47.  *    History:
  48.  *            03-07-91        Added this comment.
  49. */
  50.  
  51. #import <appkit/View.h>
  52. #import <appkit/timer.h>
  53. #import <math.h>
  54.  
  55. #define CLRVIEW            0.01
  56. #define CLRCIRC            NX_BLACK
  57.  
  58. #define SIZENUMS        0.75
  59. #define SIZEDASHES        0.90
  60.  
  61. #define WIDMIN            3.5    
  62. #define CLRMIN            NX_WHITE    
  63. #define LENMIN            (19.0/20.0)
  64. #define DEGMIN            (-6.0)
  65.  
  66. #define WIDHOUR            6.0    
  67. #define CLRHOUR            NX_WHITE    
  68. #define LENHOUR            (14.0/15.0)
  69. #define DEGHOUR        (-30.0)
  70.  
  71. #define CLRHANDS        NX_WHITE
  72. #define CLRSECOND        NX_LTGRAY
  73. #define CLRSHADOW        0.20
  74. #define CLRALARMTOP    0.8
  75. #define CLRALARMBOT    NX_DKGRAY
  76.  
  77. #define LNWIDSECOND    1.0
  78. #define LNWIDHANDS        3.0
  79.  
  80. #define OFFSETHANDSX    1.0
  81. #define OFFSETHANDSY    (-1.0)
  82. #define OFFSETSHADX    2.0
  83. #define OFFSETSHADY    (-2.0)
  84.  
  85. #define TICKSEC            (-360.0/60.0)    
  86. #define TICKMIN            (TICKSEC/60.0)    
  87. #define TICKHOUR        (TICKMIN/12.0)    
  88.  
  89. #define MAX_PTS            300
  90. #define MAX_OPS            150
  91.  
  92. #define  MAX_PTS_HIT    12
  93. #define  MAX_OPS_HIT    6
  94.  
  95. #define  HITSETTING        8
  96.  
  97. #define  RADIAN            (M_PI/180)
  98.  
  99. #define  ALARM        0
  100. #define  HOUR        1
  101. #define  MINUTE        2
  102. #define  SHADOW        3
  103. #define  SECOND        4
  104.  
  105. /*
  106. *    This structure is used to hold the hit detection user path.
  107. *    The infill operator is used which takes a user path and checks
  108. *    to see whether any portion of it is covered by the
  109. *    current  path. The user path passed in is a rectangle around
  110. *    the mouse down location. The current path is the alarm hand.
  111. */
  112. typedef struct _UPath {
  113.     float     * pts;
  114.     int        num_pts;
  115.     char        *ops;
  116.     int        num_ops;
  117. } UPath;
  118.  
  119. /*
  120. *    The BOOL arguments specify whether to use gstates or not and
  121. *    whether to use the userpaths stored in the server or send them 
  122. *    with each drawing.
  123. */
  124. @interface ClockView:View
  125. {
  126.     id        animatorId, imageId, displayTime;
  127.  
  128.     BOOL    gstatesOn, upathsServer, trace;
  129.  
  130.     int        gstateHour, gstateMin, gstateSec, gstateShad,
  131.             upathHour, upathMin, upathSec, upathAlarmTop, upathAlarmBot;
  132.     
  133.     float        angleHour, angleMin, angleSec, angleAlarm,
  134.             totalTime, numIterations;
  135.  
  136.     UPath    hitPoint;
  137. }
  138.  
  139. - initFrame:(const NXRect *) frameRect;
  140. - initializeHitPoint;
  141.  
  142. - free;
  143.  
  144. - setDisplayTime:anObject;
  145. - toggleGstate:sender;
  146. - toggleUpath:sender;
  147.  
  148. - drawFace;
  149. - defineUPaths;
  150. - defineGStates;
  151.  
  152. - tick:sender;
  153.  
  154. - sizeTo:(NXCoord)width :(NXCoord)height;
  155.  
  156. - setAlarm:(NXEvent *)event;
  157. - setHitPoint:(const NXPoint *)p;
  158. - (BOOL) isHit:(const NXPoint *) p;
  159.  
  160. - mouseDown:(NXEvent *)event;
  161.  
  162. - setStateAndDraw;
  163. - drawSelf:(NXRect *)r :(int) count;
  164.  
  165. @end
  166.